//引入express模块
const express = require('express');
//引入连接池模块
const pool = require('../pool.js');
//console.log(pool);
//创建路由器对象
const r = express.Router();
//添加路由
//1.用户注册(post /reg)
//http://127.0.0.1:8080/v1/users/reg
r.post('/reg',(req,res,next)=>{
  //1.1获取post请求的数据
  let obj = req.body;
  console.log(obj);
  //1.2验证各项数据是否为空
  if(!obj.uname){
	//json方法将js对象转为json对象
	//json和send作用一样的
    res.send({code: 401, msg: 'uname不能为空'});
	//阻止往后执行
	//这是函数内，使用return
	return;
  }
  //练习：完成其它各项的验证
  if(!obj.upwd){
    res.send({code: 402,msg: 'upwd不能为空'});
	return;
  }
  if(!obj.email){
    res.send({code: 403,msg: 'email不能为空'});
	return;
  }
  if(!obj.phone){
    res.send({code: 404,msg: 'phone不能为空'});
	return;
  }
  //验证手机号码格式
  //正则表达式.test(手机号码)
  //如果手机号码格式不正确
  if( !/^1[3-9]\d{9}$/.test( obj.phone ) ){
    res.send({code: 405,msg: '手机号码格式错误'});
	return;
  }
  //1.3执行SQL命令
  pool.query('insert into xz_user set ?',[obj],(err,result)=>{
    if(err){
	  //如果数据库执行出现错了，交给下一个错误处理的中间件
	  next(err);
	  //阻止往后执行
	  return;
	}
	console.log(result);
	//表示插入成功
	res.send({code: 200,msg: '注册成功'});
  });
});
//2.用户登录(post /login)
//http://127.0.0.1:8080/v1/users/login
r.post('/login',(req,res,next)=>{
  //2.1获取post传递的数据
  let obj = req.body;
  console.log(obj);
  //2.2验证各项数据是否为空
  if(!obj.uname){
    res.send({code: 401,msg: 'uname不能为空'});
	return;
  }
  if(!obj.upwd){
    res.send({code: 402,msg: 'upwd不能为空'});
	return;
  }
  //2.3执行SQL命令
  pool.query('select * from xz_user where uname=? and upwd=?',[obj.uname,obj.upwd],(err,result)=>{
    if(err){
	  //如果有错误交给下一个中间件处理
	  next(err);
	  return;
	}
	console.log(result);
	//查询的结果是数组，如果是空数组说明登录失败，否则登录成功
	if(result.length === 0){
	  res.send({code: 201,msg: '登录失败'});
	}else{
	  res.send({code: 200,msg: '登录成功'});
	}
  });  
});
//3.修改用户(put /)
//http://127.0.0.1:8080/v1/users/
r.put('/',(req,res,next)=>{
  //3.1获取post传递的数据(uid、email、phone、user_name、gender)
  let obj = req.body;
  console.log(obj);
  //3.2验证各项数据是否为空
  let i = 400;//记录状态码
  for(let k in obj){
	//每次遍历一个属性，状态码加1
	i++
    //k 属性名   obj[k]  属性值
	//console.log(k, obj[k]);
	//如果属性值为空，提示属性名这项不能为空
	if(!obj[k]){
	  res.send({code: i,msg: `${k}不能为空`});
	  return;
	}
  }
  //3.3执行SQL命令，修改用户的数据
  pool.query('update xz_user set ? where uid=?',[obj,obj.uid],(err,result)=>{
    if(err){
	  //如果有错误，交给下一个错误处理中间件
	  next(err);
	  return;
	}
	console.log(result);
	//结果是对象，如果对象下的affectedRows的值是0说明修改失败，否则修改成功
	if(result.affectedRows === 0){
	  res.send({code: 201,msg: '修改失败'});
	}else{
	  res.send({code: 200, msg: '修改成功'});
	}
  });
});
//4.查找用户(get /编号)
//http://127.0.0.1:8080/v1/users/5
r.get('/:uid',(req,res,next)=>{
	//4.1获取路由传参的数据
	let obj = req.params;
	console.log(obj);
	//4.2执行SQL命令
	pool.query('select uid,uname,email,phone from xz_user where uid=?',[obj.uid],(err,result)=>{
		if(err){
			
			//交给下一个中间件处理
			next(err);
			return;
		}
		console.log(result);
		//结果是数组，如果是空数组说明该用户不存在，否则查找到了
		if(result.length === 0){
			res.send({code:201,msg:'该用户不存在'});
		}else{
			res.send({code:200,msg:'查找成功',data:result});
		}
	});
});
//5.删除用户(delete /编号)
r.delete('/:uid',(req,res,next)=>{
	
  //5.1获取路由传参的数据 
   let obj = req.params;
   console.log(obj);   
   //5.2执行SQL命令
   pool.query('delete from xz_user where uid =?',[obj.uid],(err,result)=>{
	   if(err){
		   next(err);
		   return;
	   }
	   console.log(result);
	   //如果对象下的affectedRows的值是0说明删除失败，否则删除成功
	   if(result.affectedRows === 0){
		   res.send({code:201,msg:'删除失败'});
	   }else{
		   res.send({code:200,msg:'删除成功'});
	   }
	  
   });
  
});
//6.用户列表(get /)
//http://127.0.0.1:8080/v1/users/
r.get('/',(req,res,next)=>{
	//获取传递的数据
	//6.1获取查询字符串(get)传递的数据
	let obj = req.query;
	console.log(obj);
	//6.2验证是否为空，如果为空设置默认值
	if(!obj.pno) obj.pno = 1;
	if(!obj.count) obj.count = 5;
	
	console.log(obj);
	//6.3计算开始查询的值
	let start = (obj.pno-1) * obj.count;
	//6.4把每页的数据量转为数值型
	let size = parseInt(obj.count);
	//6.5执行SQL命令（分页查询）
	pool.query('select uid,uname,email,phone from xz_user limit ?,?',[start,size],(err,result)=>{
		if(err){
			next(err);
			return;
		}
		console.log(result);
		//查询的结果是数组，把数组响应给浏览器端
		res.send({code: 200, msg: '查找成功',data: result});
	});
});
  
//导出路由器对象
module.exports = r;